<?php
namespace App\Common\Lib\Utils\Helper\Array_;

use App\Common as com;
use App\Common\Lib\Utils\Helper\Array_\Flip as thisFlip;

class Flip extends com\Lib\LibBase {

	/**
	 * @var mixed
	 */
	protected $data = null;

	/**
	 * keyPath
	 * @var string
	 */
	private string $keyPath = '';

	/**
	 * 是否保留冲突项
	 * @var bool [false][默认]
	 */
	private bool $mergeConflict = false;

	/**
	 * 反转后的新键值
	 * @var bool|null
	 */
	private $newValue = null;

	/**
	 * Trim constructor.
	 * @param int|string|array $data 要分隔的字符(支持字符串(1,2,3)、数组[1,2,3]、纯数字[1])
	 */
	public function __construct( $data ) {
		$this->data = $data;
		//
		parent::__construct();
	}

	/**
	 * 设置keyPath
	 * @param string $keyPath 数组路径（支持格式：1.PHP数组访问的格式，如：['a'][0]['b']， 2."->"分割，如：a->b->c）。[默认]使用系统内置函数处理(array_flip)
	 * @return $this
	 */
	public function keyPath( string $keyPath ):self {
		$this->keyPath = $keyPath;
		//
		return $this;
	}

	/**
	 * 是否保留冲突项
	 * @param bool $mergeConflict 是否保留 [false][默认]
	 * @return $this
	 */
	public function mergeConflict( bool $mergeConflict = true ):self {
		$this->mergeConflict = $mergeConflict;
		//
		return $this;
	}

	/**
	 * 反转后的新键值
	 * @param bool $newValue 是否保留 [false][默认]
	 * @return $this
	 */
	public function newValue( bool $newValue ):self {
		$this->newValue = $newValue;
		//
		return $this;
	}

	/**
	 * @return array
	 */
	public function getResData(  ):array {
		return com\Lib\Fun\Array_::arrayFlip( $this->data, [
			'keyPath' => $this->keyPath,
			'mergeConflict' => $this->mergeConflict,
			'newValue' => $this->newValue,
		] );
	}

	// ===============================
	//
	//
	// 下面为静态方法
	//
	//
	// ===============================

	/**
	 * @param int|string|array $data 要分隔的字符(支持字符串(1,2,3)、数组[1,2,3]、纯数字[1])
	 * @return $this
	 */
	public static function makeOfNew( $data ):self {
		return self::make( ...func_get_args() );
	}

}
